﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication3
{
    public partial class LibxAut : Form
    {
        DataSet dsLibxAut = new DataSet();
        string rutaBDBiblioteca = "Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";
        CheckBox ChbEstado = new CheckBox();
        BindingManagerBase bmLibxAut;
        public LibxAut()
        {
            InitializeComponent();
        }

        private void LibxAut_Load(object sender, EventArgs e)
        {
            SetearControl();
            SqlConnection cnBiblioteca;
            AccDatBiblioteca datos = new AccDatBiblioteca();

            cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = datos.ObtenerAdaptador("Select * from LibxAut", cnBiblioteca);

            adp.Fill(dsLibxAut, "LibxAut");
            cnBiblioteca.Close();

            Grilla_LibxAut.DataSource = dsLibxAut.Tables["LibxAut"];
            Grilla_LibxAut.Refresh();
            TitulosColumnas();

            bmLibxAut = BindingContext[dsLibxAut, "LibxAut"];
            AsociarTextos();
            MostrarPosicion();  
        }


        private void TitulosColumnas()
        {
            Grilla_LibxAut.Columns["Cod_Lib"].HeaderText = "CODIGO LIBRO";
            Grilla_LibxAut.Columns["Cod_Aut"].HeaderText = "CODIGO AUTOR";
            Grilla_LibxAut.Columns["Est_LibxAut"].HeaderText = "ESTADO";
        }

        private void ReemplazarControl(Control controlAnterior, Control controlNuevo)
        {
            Point ubicacion;
            Size tamanio;
            ubicacion = controlAnterior.Location;
            tamanio = controlAnterior.Size;
            controlNuevo.Location = ubicacion;
            controlNuevo.Size = tamanio;
            HabilitarControl(controlNuevo, true);
            HabilitarControl(controlAnterior, false);
        }

        private void HabilitarControl(Control ctl, bool estado)
        {
            ctl.Enabled = estado;
            ctl.Visible = estado;
        }


        private void SetearControl()
        {
            ReemplazarControl(TxtEst_LibxAut, ChbEstado);
            this.Controls.Add(ChbEstado);
            HabilitarControl(TxtEst_LibxAut, false);
        }

        private void MostrarPosicion()
        {
            int iTotal = bmLibxAut.Count;
            int iPos;

            if (iTotal == 0)
                LblPosicion.Text = "No Registros";
            else
            {
                iPos = bmLibxAut.Position + 1;
                LblPosicion.Text = iPos.ToString() + " de " + iTotal.ToString();
            }
        }

        private void AsociarTextos()
        {
            TxtCod_Lib.DataBindings.Add(new Binding("Text", dsLibxAut, "LibxAut." + dsLibxAut.Tables["LibxAut"].Columns[0].ColumnName.ToString()));
            TxtCod_Aut.DataBindings.Add(new Binding("Text", dsLibxAut, "LibxAut." + dsLibxAut.Tables["LibxAut"].Columns[1].ColumnName.ToString()));
            ChbEstado.DataBindings.Add(new Binding("Checked", dsLibxAut, "LibxAut." + dsLibxAut.Tables["LibxAut"].Columns[2].ColumnName.ToString()));
        }


        private void BtnPrimero_Click(object sender, EventArgs e)
        {

            bmLibxAut.Position = 0;
            MostrarPosicion();
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bmLibxAut.Position -= 1;
            MostrarPosicion();
        }

        private void BtnSiguiente_Click(object sender, EventArgs e)
        {
            bmLibxAut.Position += 1;
            MostrarPosicion();
        }

        private void BtnUltimo_Click(object sender, EventArgs e)
        {
            bmLibxAut.Position = bmLibxAut.Count - 1;
            MostrarPosicion();
        }

        private void BtnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void BtnAñadir_Click(object sender, EventArgs e)
        {
            DataTable LibxAut = dsLibxAut.Tables["LibxAut"];
            DataRowCollection cfilas = LibxAut.Rows;
            DataRow nuevaFila;
            try
            {
                nuevaFila = LibxAut.NewRow();
                // Datos por omisión para las columnas de la nueva fila
                nuevaFila[0] = "Cod_Lib";
                nuevaFila[1] = "Isbn";
                nuevaFila[2] = true;
                cfilas.Add(nuevaFila);
                BtnUltimo.PerformClick();
                MostrarPosicion();
                LblResultado.Text = "";
                TxtCod_Lib.Enabled = true;
                TxtCod_Lib.Focus();
            }
            catch (ConstraintException ex)
            {
                // Capturar posible error por clave duplicada
                MessageBox.Show(ex.Message);
            }
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            GestLibxAut GLibxAut = new GestLibxAut();
            if (GLibxAut.ExisteLibxAut(TxtCod_Lib.Text, rutaBDBiblioteca))
                LblResultado.Text = "Libro Existente";
            else
            {
                CLibxAut libxAut =
                     new CLibxAut(TxtCod_Lib.Text, TxtCod_Aut.Text, ChbEstado.Checked);
                if (!GLibxAut.GrabarLibxAut(libxAut, rutaBDBiblioteca))
                    LblResultado.Text = "Error en el registro del Libro";
                else
                {
                    LblResultado.Text = "Libro Guardado";
                }
            }
        }

        private void BtnBorrar_Click(object sender, EventArgs e)
        {
            GestLibxAut GLibxAut= new GestLibxAut();
            CLibxAut EliminarLibxAut =
                     new CLibxAut(TxtCod_Lib.Text, TxtCod_Aut.Text, ChbEstado.Checked = false);

            if (GLibxAut.EliminarLibxAut(EliminarLibxAut, rutaBDBiblioteca))
            {
                LblResultado.Text = "Libro Eliminado";
                bmLibxAut.Position -= 1; //muestra el registro anterior
                MostrarPosicion();
            }
            else
                LblResultado.Text = "Libro no Eliminado";
        }

        private void BtnModificar_Click(object sender, EventArgs e)
        {
            GestLibxAut GLibxAut = new GestLibxAut();
            CLibxAut ModificarLibxAut =
                     new CLibxAut(TxtCod_Lib.Text, TxtCod_Aut.Text, ChbEstado.Checked);

            if (GLibxAut.ModificarLibxAut(ModificarLibxAut, rutaBDBiblioteca))
            {
                LblResultado.Text = "Libro Modificado";
            }
            else
                LblResultado.Text = "Libro no Modificado";
        }

        private void BtnActualizar_Click(object sender, EventArgs e)
        {
            dsLibxAut.Tables.Clear();
            SqlConnection cnBiblioteca;

            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM LibxAut", cnBiblioteca);

            adp.Fill(dsLibxAut, "LibxAut");
            cnBiblioteca.Close();
            Grilla_LibxAut.DataSource = dsLibxAut.Tables["LibxAut"];
            bmLibxAut = BindingContext[dsLibxAut, "LibxAut"];
            bmLibxAut.Position = bmLibxAut.Count - 1;
            MostrarPosicion();
            LblResultado.Text = "";
            TxtCod_Lib.Focus();
        }

        private void TxtCod_Lib_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtCod_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsDigit(e.KeyChar))
                    e.Handled = false;
                else
            
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                    else
                        if (Char.IsControl(e.KeyChar))
                            e.Handled = false;
                        else
                            e.Handled = true;
        }

    }
}
